/**
 * 
 */
package bean;

import java.util.Date;
import java.sql.SQLException;
import java.text.ParseException;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.servlet.http.HttpServletRequest;

import org.richfaces.component.UISelect;

import DAO.AcessoVascularDAO;
import DAO.PacienteDAO;
import Model.AcessoVascular;
import Model.Paciente;
import Model.Usuario;
import Utils.Uteis;

/**
 * @author irio
 *
 */
public class AcessoVascularBean {
	private int id;
	private Date dataUtilizacao;
	private Date dataRetirada;
	private String motivo;
	
	private String medicoCirurgiao;
	private String nomeHospital;
	private int tipoAcesso;
	private String revisao;

	private int idUsuario;
	private int idPaciente;
	private UISelect idPacienteValidation;
	private UIInput dataRealizacaoValidation; 
	
	public UISelect getIdPacienteValidation() {
		return idPacienteValidation;
	}
	public void setIdPacienteValidation(UISelect idPacienteValidation) {
		this.idPacienteValidation = idPacienteValidation;
	}
	
	public UIInput getDataRealizacaoValidation() {
		return dataRealizacaoValidation;
	}
	public void setDataRealizacaoValidation(UIInput dataRealizacaoValidation) {
		this.dataRealizacaoValidation = dataRealizacaoValidation;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Date getDataUtilizacao() {
		return dataUtilizacao;
	}
	public void setDataUtilizacao(Date dataUtilizacao) {
		this.dataUtilizacao = dataUtilizacao;
	}
	public Date getDataRetirada() {
		return dataRetirada;
	}
	public void setDataRetirada(Date dataRetirada) {
		this.dataRetirada = dataRetirada;
	}
	public String getMotivo() {
		return motivo;
	}
	public void setMotivo(String motivo) {
		this.motivo = motivo;
	}
	public String getMedicoCirurgiao() {
		return medicoCirurgiao;
	}
	public void setMedicoCirurgiao(String medicoCirurgiao) {
		this.medicoCirurgiao = medicoCirurgiao;
	}
	public String getNomeHospital() {
		return nomeHospital;
	}
	public void setNomeHospital(String nomeHospital) {
		this.nomeHospital = nomeHospital;
	}
	public int getTipoAcesso() {
		return tipoAcesso;
	}
	public void setTipoAcesso(int tipoAcesso) {
		this.tipoAcesso = tipoAcesso;
	}
	public String getRevisao() {
		return revisao;
	}
	public void setRevisao(String revisao) {
		this.revisao = revisao;
	}
	public int getIdUsuario() {
		return idUsuario;
	}
	public void setIdUsuario(int idUsuario) {
		this.idUsuario = idUsuario;
	}
	public int getIdPaciente() {
		return idPaciente;
	}
	public void setIdPaciente(int idPaciente) {
		this.idPaciente = idPaciente;
	}
	
	public String Salvar()
	{
		try
		{
			AcessoVascular acesso = new AcessoVascular();		
			acesso.setDataUtilizacao(Uteis.javaDate2SqlDate(this.dataUtilizacao));
			acesso.setDataRetirada(Uteis.javaDate2SqlDate(this.dataRetirada));
			acesso.setMotivo(this.motivo);
			acesso.setMedicoCirurgiao(this.medicoCirurgiao);
			acesso.setNomeHospital(this.nomeHospital);
			acesso.setTipoAcesso(this.tipoAcesso);
			acesso.setRevisao(this.revisao);
			acesso.setIdPaciente(this.idPaciente);			
			
			if(this.idUsuario > 0)
				acesso.setIdUsuario(this.idUsuario);
			else
			{
				Usuario objUsuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser");			
				acesso.setIdUsuario(objUsuario.getIdUsuario());				
			}				
			
			if(this.id > 0)
			{
				acesso.setIdAcessoVascular(this.id);
				AcessoVascularDAO.Update(acesso);
			}
			else
			{
				AcessoVascularDAO.Insert(acesso);
			}		
		    
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações Salvas com sucesso"));			
		}
		catch(ParseException pexc)
		{
			pexc.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao salvar as informações, contate o administrador do sistema"));
		}		
		catch(SQLException sexc)
		{
			sexc.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao salvar as informações, contate o administrador do sistema"));
		}		
		
		return "acessovascular_list";	
	}
	
	public String Editar()
	{
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();		
		int id =  Integer.parseInt(request.getParameter("idacesso"));	
		
		try
		{
			AcessoVascular acesso = AcessoVascularDAO.LoadObject(id);
			
			this.setId(acesso.getIdAcessoVascular());
			this.setDataUtilizacao(acesso.getDataUtilizacao());
			this.setDataRetirada(acesso.getDataRetirada());
			this.setMotivo(acesso.getMotivo());
			this.setMedicoCirurgiao(acesso.getMedicoCirurgiao());
			this.setNomeHospital(acesso.getNomeHospital());
			this.setTipoAcesso(acesso.getTipoAcesso());
			this.setRevisao(acesso.getRevisao());
			this.setIdUsuario(acesso.getIdUsuario());
			this.setIdPaciente(acesso.getIdPaciente());
			
			return "acessovascular_edit";
		}
		catch(SQLException ex)
		{
			ex.printStackTrace();
			return "acessovascular_list";
		}
	}
	
	public String Inativar()
	{
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();		
		int id =  Integer.parseInt(request.getParameter("idacesso"));		
		
		try
		{
			AcessoVascularDAO.DeletarAcessoVascular(id);
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações inativadas com sucesso"));			
		}
		catch(SQLException sexc)
		{
			sexc.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao realizar a transação, contate o administrador do sistema"));
		}		
		return "acessovascular_list";
	}
	
	
	public void validateData(FacesContext context, UIComponent uicomponent, Object value)
	{
		Date dataSel = (Date) value;		

		try {
			if(dataSel.after(new Date()))
			{
				((UIInput)uicomponent).setValid(false);
				FacesMessage message = new FacesMessage();
				message.setDetail("A data não pode estar no futuro!");        	
				message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
				throw new ValidatorException(message);
			}	
			else
			{
				
				
				Object idPacienteSelect = this.idPacienteValidation.getLocalValue();	
				if(idPacienteSelect != null)
				{
					int idPacienteSel = Integer.parseInt(this.idPacienteValidation.getLocalValue().toString());
					Paciente paciente = PacienteDAO.LoadObject(idPacienteSel);
					if(dataSel.before(paciente.getDataNascimento()))
					{
						String data = Uteis.formatarData(paciente.getDataNascimento());
						((UIInput)uicomponent).setValid(false);
						FacesMessage message = new FacesMessage();					
						message.setDetail("A data não pode ser menor que "+ data +" que é data de nascimento do paciente! ");
						message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
						throw new ValidatorException(message);
					}						
				}
				else
				{
					((UIInput)uicomponent).setValid(false);
				}
			}	
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public void validateDataRetirada(FacesContext context, UIComponent uicomponent, Object value)
	{
		Date dataSel = (Date) value;		
		
		try {
			if(dataSel.after(new Date()))
			{
				((UIInput)uicomponent).setValid(false);
				FacesMessage message = new FacesMessage();
				message.setDetail("A data não pode estar no futuro!");        	
				message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
				throw new ValidatorException(message);
			}	
			else
			{
				Object objDataRealizacao = this.dataRealizacaoValidation.getLocalValue();
				
				if(objDataRealizacao != null && objDataRealizacao != "")
				{
					Date datareallizacao = (Date) objDataRealizacao;
					if(dataSel.before(datareallizacao))
					{
						((UIInput)uicomponent).setValid(false);
						FacesMessage message = new FacesMessage();					
						message.setDetail("A data não pode ser menor que a data de realização!");
						message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
						throw new ValidatorException(message);						
					}
				}
				
				Object idPacienteSelect = this.idPacienteValidation.getLocalValue();	
				if(idPacienteSelect != null)
				{
					int idPacienteSel = Integer.parseInt(this.idPacienteValidation.getLocalValue().toString());
					Paciente paciente = PacienteDAO.LoadObject(idPacienteSel);
					if(dataSel.before(paciente.getDataNascimento()))
					{
						String data = Uteis.formatarData(paciente.getDataNascimento());
						((UIInput)uicomponent).setValid(false);
						FacesMessage message = new FacesMessage();					
						message.setDetail("A data não pode ser menor que "+ data +" que é data de nascimento do paciente! ");
						message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
						throw new ValidatorException(message);
					}						
				}
				else
				{
					((UIInput)uicomponent).setValid(false);
				}
			}	
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

